const express = require('express');
const app = express();
const { Person } = require('./db');

app.use(express.json());//解析 中间件

// 获取所有数据
app.get('/api/v1/people', async (req, res) => {
  // 在express中获取url中传递的参数使用 req.query.参数名
  // const result = await Person.find({userName:req.query.userName}); // 查询数据返回一个数组形式的内容
  const result = await Person.find(); // 查询数据返回一个数组形式的内容
  
  res.json({
    code: 'success',
    data: result,
  });
});

// 新增
app.post('/api/v1/people',async(req, res) => {
    // var p = new Person(req.body);
    // p.save()
    //   .then(r => {
    //     res.json({
    //       code: 'success',
    //       msg: '创建数据成功',
    //     });
    //   })
    //   .catch(err => {
    //     res.json({
    //       code: 'error',
    //       msg: err,
    //     });
    //   });
  try {
    var p = new Person(req.body);
    await p.save();
    res.json({
      code: 'success',
      msg: '创建数据成功',
    });
  } catch (err) {
    res.json({
      code: 'erroe',
      msg: err,
    });
  }
});

// 根据id查询数据
//  在express的路由中可以使用:形式传参数 获取的时候使用req.params.参数名
app.get('/api/v1/people/:id', async (req, res) => {
  const result = await Person.findById(req.params.id);
  res.json({
    code: 'success',
    data: result,
  });
});

app.put('/api/v1/people/:id', async (req, res) => {
  try {
    // 根据id修改数据
    const result = await Person.findByIdAndUpdate(req.params.id, req.body);
    res.json({
      code: 'success',
      msg: '修改数据成',
      data: result,
    });
  } catch (err) {
    res.json({
      code: 'error',
      msg: err,
    });
  }
});

app.delete('/api/v1/people/:id', async (req, res) => {
  try {
    const result = await Person.findByIdAndDelete(req.params.id);
    res.json({
      code: 'success',
      msg: '删除数据成功',
      data: result,
    });
  } catch (err) {
    res.json({
      code: 'error',
      msg: err,
    });
  }
});

app.listen(3333, () => {
  console.log('服务器运行于3333端口');
});
